Subscription factories
サブスクリプション・ファクトリは IRP に後から追加されたもので、ユーザーは 0 個以上のパラメータを持つサブスクリプションの「テンプレート」を定義できるようになりました。そのため、サブスクリプションファクトリは、susbcription タイプと互換性のあるリターンタイプを持つ単なる関数です。
Subscription factories were a later addition to IRP, enabling users to define “templates” for subscriptions that have zero or more parameters. As such, they’re merely functions with a return type compatible with the susbcription type.
code:C#
// Rx
interface IDisposable
{
void Dispose();
}
class Program
{
IDisposable Create(DateTimeOffset dueTime, string path) =>
Observable.Timer(dueTime)
.Subscribe(new FileObserver<long>(path));
}
// IRP
interface IAsyncReactiveQubscription : IExpressible
{
Task DisposeAsync();
}
class Program
{
Task<IAsyncReactiveQubscription> CreateAsync(Uri subscriptionId, DateTimeOffset dueTime, string path) =>
AsyncReactiveQbservable.Timer(dueTime)
.SubscribeAsync(subscriptionId, AsyncReactiveQbserver.File<long>(path));
}
AsyncReactiveQbservable.TimerやAsyncReactiveQbserver.File<T>などのこれらのクライアント側のメソッドの実装方法については後述します。特に、これらのメソッドが、外部識別子を使ってアドレス指定されているターゲットARPシステムのリアクティブアーティファクトを参照するためのプロキシとしてどのように使用されるかについて説明します。
The way these client-side methods such as AsyncReactiveQbservable.Timer and AsyncReactiveQbserver.File<T> are implemented will be discussed later. In particular, we’ll discuss how these methods are used as proxies to refer to reactive artifacts in a target IRP system, which are addressed using an extrinsic identifier.
Rxは、サブスクリプションを表す型として機能するIDisposable上の代数を持つことに注意してください。RxはIDisposable上の代数を持っており、それはサブスクリプションを表す型として機能することに注意してください。IRPでは同型の同等のもの、すなわち(IAsyncReactiveQubscriptionのような)ISubscriptionファミリーのインターフェースのための代数を持つことは論理的であると思われます。サブスクリプションファクトリはこれを可能にするが、今日のIRPシステムはまだこれを利用していません。
Note that Rx has an algebra over IDisposable, which acts as the type representing a subscription. It seems logical to have the isomorphic equivalent in IRP, namely an algebra for the ISubscription family of interfaces (such as IAsyncReactiveQubscription). Subscription factories allow for this but no IRP system today has taken advantage of this yet.